home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / other / apic / examples / helloworld.lst < prev    next >
File List  |  1998-01-05  |  10KB  |  253 lines

  1. #PIC V1.0 (c)1997 J.Petroglou    LIST FILE
  2. #file: dh2:IDE/APICforAMINET/APIC/examples/HelloWorld.src
  3. #date: Sun Dec 14 20:42:20 1997
  4. #pic : PIC16C84
  5. ADDR CODE     SRCLINE SOURCECODE
  6.  
  7. 0000             000001 
  8. 0000             000002 
  9. 0000             000003 
  10. 0000             000004 
  11. 0000             000005 ;this is a hello world program written in microchip assembler,
  12. 0000             000006 ;
  13. 0000             000007 ;the string is transmitted serial to an terminal. the baudrate is 
  14. 0000             000008 ;determined by the value of "bitcntr", loaded with "delay"
  15. 0000             000009 ;19200 at 4 MHz clock speed needs at all 52 cycles pro bit
  16. 0000             000010 ;
  17. 0000             000011 ;after sending all characters pic runs an endless loop, a reset is necessary
  18. 0000             000012 ;to send string again. this reset is performed by a watchdog time out. the
  19. 0000             000013 ;watchdogtimer is set to 2.3 seconds (128 * 18 ms)
  20. 0000             000014 ;
  21. 0000             000015 ;string lenght is defined by a zero byte at end of string
  22. 0000             000016 ;
  23. 0000             000017 ;
  24. 0000             000018 ; http://linux.rz.fh-hannover.de/~duesterb/
  25. 0000             000019 
  26. 0000             000020 
  27. 0000             000021 
  28. 0000             000022 
  29. 0000             000023         list    p=pic16c84, r=dec, s=off    ;radix = decimal
  30. 0000             000024                             ;case sensitivity=off
  31. 0000             000025 
  32. 0000             000026 back
  33. 0000             000027 
  34. 0000             000028 
  35. 0000             000029 clockspeed    =    4000000                ;clockspeed is 4 Mhz
  36. 0000             000030 baudrate    =    19200                ;enter baudrate here
  37. 0000             000031 
  38. 0000             000032 delay        =    (clockspeed/4/baudrate-12)/4    ;value for baudrate, 12 cycles fixed, 4 cycles delay
  39. 0000             000033 
  40. 0000             000034 ram        =    0ch        ;beginning of RAM register
  41. 0000             000035 
  42. 0000             000036 #define    happy
  43. 0000             000037 
  44. 0000             000038 
  45. 0000             000039     CBLOCK ram
  46. 0000             000040 
  47. 0000             000040 
  48. 0000             000041     delaycntr                ;bit dely counter
  49. 0000             000042     charcntr                ;counter shows actual character of string
  50. 0000             000043     bitcntr                    ;counter shows actual bit of byte
  51. 0000             000044     xmitdata                ;data to transmit
  52. 0000             000045 
  53. 0000             000045 
  54. 0000             000046     ENDC
  55. 0000             000047 
  56. 0000             000048 
  57. 0000             000049 
  58. 0000             000050 
  59. 0000             000051 PC        =    02h        ;programcounter
  60. 0000             000052 PortA        =    05h        ;register 05h is PortA
  61. 0000             000053     
  62. 0000             000054 
  63. 0000             000055 
  64. 0000             000056 #define        TXD    PortA,0            ;TXD line is bit 0 from Port A
  65. 0000             000057 #define        c    03h,0            ;carry bit is bit 0 from status register
  66. 0000             000058 #define        z    03h,2            ;zero bit is bit 2 from status register
  67. 0000             000059 
  68. 0000             000060 
  69. 0000             000061 
  70. 0000             000062 
  71. 0000             000063 ; Remember to change device info if programming a different PIC. Do not use RC
  72. 0000             000064 ; devices. Their clock speed is not sufficiently accurate or stable for serial
  73. 0000             000065 ; communication. 
  74. 0000             000066 
  75. 0000             000067 
  76. 0000             000068 
  77. 0000 3000        000069 begin        movlw    0        ;move 0 to tristate register, set port to output.
  78. 0001 0065        000070         tris    PortA
  79. 0002             000071 
  80. 0002 018D        000072         clrf    charcntr    ;we start at the first character
  81. 0003             000073                      
  82. 0003             000074 
  83. 0003 3008        000075 send_byte    movlw    8h        ;Eight bits in a byte. 
  84. 0004 008E        000076         movwf    bitcntr
  85. 0005             000077 
  86. 0005 2020        000078         call    string        ;Get character from string. 
  87. 0006 008F        000079         movwf    xmitdata    ;Put character into the transmit byte. 
  88. 0007             000080 
  89. 0007 088F        000081         movf    xmitdata,f    ;test xmitdata on zero
  90. 0008 1903        000082         btfsc    z
  91. 0009 2819        000083         goto    endless        ;do endless loop if xmitdata was zero
  92. 000A             000084         
  93. 000A             000085 
  94. 000A 1405        000086         bsf    TXD        ;set TXD line, dirct connection
  95. 000B             000087 
  96. 000B 0A8D        000088         incf    charcntr,f    ;next position of string. 
  97. 000C             000089 
  98. 000C 201A        000090         call    bitdelay    ;Start bit. ((delay * 4) + 4) cycles
  99. 000D             000091 
  100. 000D             000092 
  101. 000D             000093 
  102. 000D 0C8F        000094 xmit        rrf    xmitdata,f    ;Rotate right moves data bits into
  103. 000E             000095                     ;carry, starting with bit 0. 
  104. 000E             000096 
  105. 000E 1803        000097         btfsc    c        ;clear TXD if carry bit is set
  106. 000F 1005        000098         bcf    TXD        
  107. 0010 1C03        000099         btfss    c        ;set TXD if carry bit is clear
  108. 0011 1405        000100         bsf    TXD
  109. 0012             000101 
  110. 0012             000102 
  111. 0012             000103 
  112. 0012 201A        000104         call    bitdelay    ;Data bit.
  113. 0013             000105 
  114. 0013 0B8E        000106         decfsz    bitcntr,f    ;Not eight bits yet? Send next data bit
  115. 0014 280D        000107         goto    xmit
  116. 0015             000108 
  117. 0015 1005        000109         bcf    TXD        ;clear TXD
  118. 0016             000110 
  119. 0016             000111 
  120. 0016             000112 
  121. 0016 201A        000113         call    bitdelay    ;Stop bit. ((delay * 4) + 4) cycles
  122. 0017 201A        000114         call    bitdelay    ;Stop bit. ((delay * 4) + 4) cycles
  123. 0018             000115 
  124. 0018             000116 
  125. 0018 2803        000117         goto    send_byte    ;goto send_byte if line feed is not send
  126. 0019             000118 
  127. 0019             000119 
  128. 0019             000120 
  129. 0019             000121 
  130. 0019 2819        000122 endless        goto    endless        ;Endless loop. Reset controller to run
  131. 001A             000123                     ;program again.
  132. 001A             000124 
  133. 001A             000125 
  134. 001A             000126 
  135. 001A             000127 
  136. 001A             000128 
  137. 001A             000129 
  138. 001A             000130 
  139. 001A             000131 
  140. 001A             000132 
  141. 001A             000133 
  142. 001A             000134 ; To change the baud rate, substitute a new value for bitdelay at the beginning of
  143. 001A             000135 ; this program. 
  144. 001A             000136 
  145. 001A             000137 
  146. 001A             000138 
  147. 001A 300A        000139 bitdelay    movlw    delay        ;this bitdelay delays ((delay * 4) + 4) cycles
  148. 001B 008C        000140         movwf    delaycntr
  149. 001C 0000        000141 :loop        nop
  150. 001D 0B8C        000142         decfsz    delaycntr,f
  151. 001E 281C        000143         goto    :loop        ;this is an local loop
  152. 001F 3400        000144         retlw    0
  153. 0020             000145 
  154. 0020             000146 
  155. 0020             000147 
  156. 0020             000148 
  157. 0020             000149 
  158. 0020             000150 
  159. 0020             000151 
  160. 0020 080D        000152 string        movf    charcntr,w
  161. 0021 0782        000153         addwf    PC,f        ;String consisting of "Hello world"
  162. 0022             000154                     ;followed by a linefeed. 
  163. 0022             000155 
  164. 0022             000156 
  165. 0022             000157 
  166. 0022             000158 
  167. 0022             000160 
  168.  
  169.  
  170. I`m happy
  171.  
  172.  
  173. 0022             000164 
  174. 0022 3448        000165           retlw    "Hello world",0ah,0ah    ;string, two linefeeds
  175. 0023 3465        000165 
  176. 0024 346C        000165 
  177. 0025 346C        000165 
  178. 0026 346F        000165 
  179. 0027 3420        000165 
  180. 0028 3477        000165 
  181. 0029 346F        000165 
  182. 002A 3472        000165 
  183. 002B 346C        000165 
  184. 002C 3464        000165 
  185. 002D 340A        000165 
  186. 002E 340A        000165 
  187. 002F             000166 
  188. 002F             000168 
  189. 002F             000170 
  190. 002F             000172 
  191. 002F             000173 
  192. 002F 340D        000174         retlw    0dh,0        ;one cr, Zerobyte => stop sending
  193. 0030 3400        000174 
  194. 0031             000175 
  195. 0031             000176 
  196. 0031             000177 
  197. 0031             000178 
  198. 0031             000179         end
  199.  
  200.  
  201. Used Symbols
  202. -----------------------------------------
  203. back                             00000000
  204. clockspeed                       003D0900
  205. baudrate                         00004B00
  206. delay                            0000000A
  207. ram                              0000000C
  208. delaycntr                        0000000C
  209. charcntr                         0000000D
  210. bitcntr                          0000000E
  211. xmitdata                         0000000F
  212. PC                               00000002
  213. PortA                            00000005
  214. begin                            00000000
  215. send_byte                        00000003
  216. xmit                             0000000D
  217. endless                          00000019
  218. bitdelay                         0000001A
  219. string                           00000020
  220.  
  221.  
  222. Used Defines
  223. -----------------------------------------
  224. happy                            
  225. c                                03h,0 
  226. z                                03h,2 
  227. TXD                              PortA,0 
  228.  
  229.  
  230. PROGRAM MEMORY USAGE TABLE:    '-' = not used  'X' = used
  231.  
  232. 0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX X---------------
  233. 0040 : ---------------- ---------------- ---------------- ----------------
  234. 0080 : ---------------- ---------------- ---------------- ----------------
  235. 00C0 : ---------------- ---------------- ---------------- ----------------
  236. 0100 : ---------------- ---------------- ---------------- ----------------
  237. 0140 : ---------------- ---------------- ---------------- ----------------
  238. 0180 : ---------------- ---------------- ---------------- ----------------
  239. 01C0 : ---------------- ---------------- ---------------- ----------------
  240. 0200 : ---------------- ---------------- ---------------- ----------------
  241. 0240 : ---------------- ---------------- ---------------- ----------------
  242. 0280 : ---------------- ---------------- ---------------- ----------------
  243. 02C0 : ---------------- ---------------- ---------------- ----------------
  244. 0300 : ---------------- ---------------- ---------------- ----------------
  245. 0340 : ---------------- ---------------- ---------------- ----------------
  246. 0380 : ---------------- ---------------- ---------------- ----------------
  247. 03C0 : ---------------- ---------------- ---------------- ----------------
  248.  
  249. Program Memory Words Used:  0049
  250. Program Memory Words Free:  0975
  251.  
  252. Errors: 0
  253.